package com.gem.day13;

import java.io.File;
import java.io.IOException;

/**
 * 本类用来演示Java File类
 * 该类是用来映射磁盘上的文件或者文件夹,它是Java用来描述本地文件或者文件夹的类
 * 
 * @author easonsy
 * 2020年8月4日 上午10:27:05
 */
public class FileDemo {
	public static void main(String[] args) {
		File file = new File("D:\\music\\周杰伦");
		//File file = new File("D:\\music", "周杰伦");

		//判断方法
		System.out.println(file.isDirectory());
		System.out.println(file.isFile());
		System.out.println(file.isHidden());
		System.out.println(file.exists());
		System.out.println(file.canWrite());
		System.out.println(file.lastModified());
		//获取文件大小
		//注意: 如果file映射的是文件夹,则length无意义
		//System.out.println(file.length());

		System.out.println("----------------------------------");

		//createFolder("D:\\music\\周杰伦\\十一月的肖邦");

		//createNewFile("D:\\music\\周杰伦\\十一月的肖邦\\夜曲.mp3");

		//deleteFileOrFolder("D:\\music\\周杰伦");

		//showFileAndFolder("C:\\Program Files\\Java\\jdk-11.0.2\\bin");

		deleteFileOrFolder("D:\\IO");
	}

	/**
	 * 创建文件夹
	 */
	public static void createFolder(String pathname) {
		//1.构建File对象
		File file = new File(pathname);
		//2.判断是否存在
		if (!file.exists()) {
			//3.创建文件夹
			//注意:mkdirs创建多层文件夹,mkdir创建单层
			boolean result = file.mkdirs();
			if (result) {
				System.out.println("创建成功...");
			} else {
				System.out.println("创建失败...");
			}
		} else {
			System.out.println("目标已经存在...");
		}
	}

	/**
	 * 创建文件
	 */
	public static void createNewFile(String filename) {
		File file = new File(filename);
		if (!file.exists()) {
			try {
				boolean result = file.createNewFile();
				if (result) {
					System.out.println("创建成功...");
				} else {
					System.out.println("创建失败...");
				}
			} catch (IOException e) {
				e.printStackTrace();
			}
		} else {
			System.out.println("目标已经存在...");
		}
	}

	/**
	 * 删除文件或者文件夹
	 * 注意: 无法删除含有内容的文件夹!
	 */
	public static void deleteFileOrFolder(String pathname) {
		File file = new File(pathname);
		//判断目标位置是否存在
		if (file.exists()) {
			//判断是否是文件
			if (file.isFile()) {
				//直接删除
				file.delete();
			} else {
				//说明是目录,获取该目录下所有的内容
				File[] files = file.listFiles();
				//遍历
				for (File f : files) {
					deleteFileOrFolder(f.getAbsolutePath());
				}
				//删除文件夹
				file.delete();
			}
		} else {
			System.out.println("目标不存在...");
		}
	}

	/**
	 * 罗列文件夹下所有的内容
	 */
	public static void showFileAndFolder(String filepath) {
		File file = new File(filepath);
		if (file.exists() && file.isDirectory()) {

			//获取所有文件或者文件夹的名字
			//String[] names = file.list();

			//传入文件名过滤器对象
			String[] names = file.list(new SuffixFilter(".dll"));

			for (String name : names) {
				System.out.println(name);
			}

			//获取所有文件或者文件夹的File对象
			/*File[] listFiles = file.listFiles();
			for (File f : listFiles) {
				if (f.isDirectory()) {
					//递归
					showFileAndFolder(f.getAbsolutePath());
				} else {
					System.out.println(f.getName());
				}
			}*/
		} else {
			System.out.println("目标不存在或者不是目录...");
		}
	}

}
